package com.itheima.controller;

import com.alibaba.fastjson.JSON;
import com.itheima.pojo.Dept;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

/*
 Servlet技术
   在没有 使用springmvc框架的时候 谁来解析 请求  谁来完成响应呢？
      Tomcat
         ServletRequest     处理请求的对象
         ServletResponse    处理响应的对象
       它们不针对任何协议。
       于是 它们又有各自的儿子，来优化处理Http协议的请求与响应
       HttpServletRequest   专门处理http请求协议的对象
       HttpServletReponse   专门处理http响应协议的对象

 */
@Controller
public class TestController {
    @GetMapping("/test") // 设置了一个请求的路径
    public void test(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // request代表请求信息   response 代表响应信息
        // 1:可以通过 request 获取请求的url
        String url = request.getRequestURL().toString();
        System.out.println("获取的请求url:"+url);
        //2:可以获取 请求头信息
        String host = request.getHeader("Host");
        System.out.println("根据请求头的名字获取指定请求头的值:"+host);
        //3:获取请求参数
        String name = request.getParameter("name");
        System.out.println("获取指定参数name的值:"+name);

        // response 就代表 服务器响应给浏览器的信息
        //  浏览器 服务器 交流的底层  IO流
//        response.setContentType("text/html;charset=utf-8");//设置响应内容类型

//        PrintWriter writer = response.getWriter(); 这个流是 服务器通向浏览器的 响应体
//        response.getWriter().write("<h1>hi  xiaohaozi鸭脖</h1>");
          response.setContentType("application/json;charset=utf-8");//设置响应内容类型
          Dept dept = new Dept(10,"春日部", LocalDateTime.now(),LocalDateTime.now());
//          response.getWriter().write(dept.toString());
          // Dept(id=10, name=春日部, createTime=2023-06-14T10:10:41.266242500, updateTime=2023-06-14T10:10:41.266242500)
          // 如果我就想把对象 变成 json 写出去怎么办？
          // 充分利用面向对象思想   找一个 可以吧 对象 转换成json字符串 方法
          // 隆重的介绍 来自 alibaba家族的 fastjson 所以需要导入依赖
//         String jsonStr = JSON.toJSONString(dept);//将指定对象转换成json字符串
//         response.getWriter().write(jsonStr);

          Dept dept1 = new Dept(10,"夏洛部", LocalDateTime.now(),LocalDateTime.now());

          List<Dept> deptList = new ArrayList<>();
            deptList.add(dept);
            deptList.add(dept1);
          String jsonString = JSON.toJSONString(deptList);
        response.getWriter().write(jsonString);

    }
}
